package com.example.choupaiapp.main.view.video

import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.widget.FrameLayout

import com.example.choupaiapp.R

/**
 * Created by ASUS on 2020/4/27.
 */

class ScaleFrameLayout @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : FrameLayout(context, attrs, defStyleAttr) {
    private var ratio = 1.0f

    init {
        val mTypedAttay = context.obtainStyledAttributes(attrs, R.styleable.ScaleImageView)
        ratio = mTypedAttay.getFloat(R.styleable.ScaleImageView_ratio, 1.0f)
        mTypedAttay.recycle()
    }

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        var widthMeasureSpec = widthMeasureSpec
        var heightMeasureSpec = heightMeasureSpec
        // 父容器传过来的宽度方向上的模式
        val widthMode = View.MeasureSpec.getMode(widthMeasureSpec)
        // 父容器传过来的高度方向上的模式
        val heightMode = View.MeasureSpec.getMode(heightMeasureSpec)

        // 父容器传过来的宽度的值
        var width = View.MeasureSpec.getSize(widthMeasureSpec) - paddingLeft
        -paddingRight
        // 父容器传过来的高度的值
        var height = View.MeasureSpec.getSize(heightMeasureSpec) - paddingLeft
        -paddingRight

        if (widthMode == View.MeasureSpec.EXACTLY
                && heightMode != View.MeasureSpec.EXACTLY && ratio != 0.0f) {
            // 判断条件为，宽度模式为Exactly，也就是填充父窗体或者是指定宽度；
            // 且高度模式不是Exaclty，代表设置的既不是fill_parent也不是具体的值，于是需要具体测量
            // 且图片的宽高比已经赋值完毕，不再是0.0f
            // 表示宽度确定，要测量高度
            height = (width / ratio + 0.5f).toInt()
            heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(height,
                    View.MeasureSpec.EXACTLY)
        } else if (widthMode != View.MeasureSpec.EXACTLY
                && heightMode == View.MeasureSpec.EXACTLY && ratio != 0.0f) {
            // 判断条件跟上面的相反，宽度方向和高度方向的条件互换
            // 表示高度确定，要测量宽度
            width = (height * ratio + 0.5f).toInt()

            widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(width,
                    View.MeasureSpec.EXACTLY)
        }

        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
    }

}//        super(context);
//        super(context, attrs);
